
package com.crowdfunding.circle.trade.service;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.crowdfunding.circle.analyze.dao.ProjectAnalyzeDao;
import com.crowdfunding.circle.analyze.entity.ProjectAnalyzeVO;
import com.crowdfunding.circle.question.dao.QuestionDao;
import com.crowdfunding.circle.question.entity.QuestionVO;
import com.crowdfunding.circle.trade.dao.TradeRecordDao;
import com.crowdfunding.circle.trade.entity.TradeRecordVO;
import com.crowdfunding.circle.trade.param.TradeRecordParam;

/**
 * 费用收支记录，包括\r\n拆解查看支付记录，\r\n拆解人收款记录，\r\n\r\n问题提问支付Service实现类
 *
 * @author 朱国军
 * @version 2016年07月10日 朱国军
 */
@Service
public class TradeRecordService {

    @Autowired
    private TradeRecordDao tradeRecordDao;

    @Autowired
    private ProjectAnalyzeDao projectAnalyzeDao;

    @Autowired
    private QuestionDao questionDao;

    /**
     * 新增，注：返回的添加的条数，获取主键用entity.getId();
     *
     * @param entity 要增加的费用收支记录，包括\r\n拆解查看支付记录，\r\n拆解人收款记录，\r\n\r\n问题提问支付对象
     * @return 返回新增的条数
     */
    public Integer insert(TradeRecordVO entity) {
        if (entity.getTradeType() == 2 && entity.getTradeState() == 1) {
            QuestionVO questionVO = new QuestionVO();
            questionVO.setQuestionId(entity.getTradeTargetId());
            questionVO.setQuestionStatus(2);
            questionDao.update(questionVO);
        }

        return tradeRecordDao.insert(entity);
    }

    /**
     * 修改
     *
     * @param entity 要修改的费用收支记录，包括\r\n拆解查看支付记录，\r\n拆解人收款记录，\r\n\r\n问题提问支付对象
     * @return 返回修改的条数
     */
    public Integer update(TradeRecordVO entity) {
        return tradeRecordDao.update(entity);
    }

    /**
     * 根据ID获取费用收支记录，包括\r\n拆解查看支付记录，\r\n拆解人收款记录，\r\n\r\n问题提问支付实体
     *
     * @param id 主键
     * @return 费用收支记录，包括\r\n拆解查看支付记录，\r\n拆解人收款记录，\r\n\r\n问题提问支付信息
     */
    public TradeRecordVO findById(String id) {
        return tradeRecordDao.findById(id);
    }

    /**
     * 按查询条件【分页】查询
     *
     * @param param 费用收支记录，包括\r\n拆解查看支付记录，\r\n拆解人收款记录，\r\n\r\n问题提问支付查询条件
     * @return 费用收支记录，包括\r\n拆解查看支付记录，\r\n拆解人收款记录，\r\n\r\n问题提问支付列表
     */
    public List<TradeRecordVO> queryByPage(TradeRecordParam param) {
        return tradeRecordDao.queryByPage(param);
    }

    /**
     * 根据ID删除费用收支记录，包括\r\n拆解查看支付记录，\r\n拆解人收款记录，\r\n\r\n问题提问支付
     *
     * @param id 主键
     */
    public Integer delete(String id) {
        return tradeRecordDao.delete(id);
    }

    /**
     * 根据ID和类型，初始化交易数据
     *
     * @param tradeTargetId
     * @param tradeType
     * @return
     */
    public TradeRecordVO getInitData(String tradeTargetId, Integer tradeType) {
        TradeRecordVO tradeRecordVO = new TradeRecordVO();
        tradeRecordVO.setTradeTargetId(tradeTargetId);
        tradeRecordVO.setTradeType(tradeType);
        tradeRecordVO.setTradeState(1);
        if (tradeType == 1) {
            ProjectAnalyzeVO projectAnalyze = projectAnalyzeDao.findById(tradeTargetId);
            tradeRecordVO.setProjectName(projectAnalyze.getProjectName());
            tradeRecordVO.setSaleUser(projectAnalyze.getPublishUser());
            tradeRecordVO.setSaleUserName(projectAnalyze.getPublishUserName());
        } else if (tradeType == 2 || tradeType == 3) {
            Map<String, Object> questionMap = questionDao.findById(tradeTargetId, null);
            tradeRecordVO.setQuestionDetail(questionMap.get("questionDetail").toString());
            tradeRecordVO.setSaleUser(questionMap.get("answerUser").toString());
            tradeRecordVO.setSaleUserName(questionMap.get("answerUserName").toString());
            if (tradeType == 2) {
                tradeRecordVO.setBuyUser(questionMap.get("publishUser").toString());
                tradeRecordVO.setBuyUserName(questionMap.get("publishUserName").toString());
            }
        }
        return tradeRecordVO;
    }

    /**
     * 查询个人收到的拆解费用
     *
     * @param userId
     * @return
     */
    public BigDecimal queryTotalFee(String userId) {
        return tradeRecordDao.queryTotalFee(userId);
    }
}
